/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.proyecto.modelado;

import com.proyecto.datos.ConnDB;
import com.proyecto.datos.EntityAlumno;
import com.proyecto.datos.EntityConsultaIntro;
import com.proyecto.datos.EntityDetalleAlumno;
import com.proyecto.datos.EntityGrupo;
import com.proyecto.datos.EntityHorarioLab;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import java.util.ArrayList;
import java.util.Calendar;

/**
 *
 * @author mario
 */
public class DetalleAlumno {

    public ArrayList MostrarAlumnos(int id_materia) {

        ArrayList arry;
        String cadenaSql = "select al.id_alumno, al.carnet, al.nombre, al.apellido, carre.nombre_carrera,mate.cod_asignatura, "
                + "detamate.GRUPO_id_grupo, hora.horario, detalab.GRUPO_id_grupo "
                + "from ALUMNO al inner join CARRERA carre on al.CARRERA_id_carrera=carre.id_carrera, "
                + "DETALLE_ALUMNO detal inner join DETALLE_HORARIO_MATERIA detamate "
                + "on detal.DETALLE_HORARIO_MATERIA_id_detalle_horario_materia=detamate.id_detalle_horario_materia, "
                + "HORARIO hora inner join DETALLE_HORARIO_LAB detalab on "
                + "detalab.HORARIO_id_horario=hora.id_horario "
                + "inner join MATERIA mate on mate.id_materia=detalab.MATERIA_id_materia "
                + "where detalab.id_detalle_horario_lab=detal.DETALLE_HORARIO_LAB_id_detalle_horario_lab "
                + "and detal.ALUMNO_id_alumno =al.id_alumno "
                + "and (mate.id_materia=" + id_materia + ") order by al.carnet;";

        EntityConsultaIntro entCon = new EntityConsultaIntro();
        arry = entCon.EjecutarConsulta(cadenaSql);
        entCon = null;

        return arry;
    }

    public ArrayList BuscarAlumnosIntro(String dato, int id_materia) {

        ArrayList arry;
        String cadenaSQL = "select al.id_alumno, al.carnet, al.nombre, al.apellido, carre.nombre_carrera,mate.cod_asignatura, "
                + "detamate.GRUPO_id_grupo, hora.horario, detalab.GRUPO_id_grupo "
                + "from ALUMNO al inner join CARRERA carre on al.CARRERA_id_carrera=carre.id_carrera, "
                + "DETALLE_ALUMNO detal inner join DETALLE_HORARIO_MATERIA detamate "
                + "on detal.DETALLE_HORARIO_MATERIA_id_detalle_horario_materia=detamate.id_detalle_horario_materia, "
                + "HORARIO hora inner join DETALLE_HORARIO_LAB detalab on "
                + "detalab.HORARIO_id_horario=hora.id_horario "
                + "inner join MATERIA mate on mate.id_materia=detalab.MATERIA_id_materia "
                + "where detalab.id_detalle_horario_lab=detal.DETALLE_HORARIO_LAB_id_detalle_horario_lab "
                + "and detal.ALUMNO_id_alumno =al.id_alumno "
                + "and mate.id_materia=" + id_materia + " and concat(al.carnet, al.nombre,al.apellido,hora.horario) like '%" + dato + "%' order by al.carnet;";
        EntityConsultaIntro entCon = new EntityConsultaIntro();
        arry = entCon.EjecutarConsulta(cadenaSQL);
        entCon = null;
        return arry;

    }

    public String generarTXT(ArrayList arry) {
        String msj;
        String fecha;
        String nombre;
        String fila;
        Calendar cal = Calendar.getInstance();
        int anno, mes, dia, hora, min, seg;
        try {
            anno = cal.get(Calendar.YEAR);
            mes = cal.get(Calendar.MONTH) + 1;
            dia = cal.get(Calendar.DATE);
            hora = cal.get(Calendar.HOUR);
            min = cal.get(Calendar.MINUTE);
            seg = cal.get(Calendar.SECOND);
            fecha = String.valueOf(dia) + String.valueOf(mes) + String.valueOf(anno) + "_" + String.valueOf(hora) + String.valueOf(min) + String.valueOf(seg);
            nombre = "/home/mario/NetBeansProjects/trunk/ProyectoUFG/src/com/archivo/IAF0_FISI" + fecha + ".txt";
            File f = new File(nombre);
            PrintWriter pw = new PrintWriter(new FileWriter(f, true));
            EntityConsultaIntro entCon;
            for (int i = 0; i < arry.size(); i++) {
                entCon = (EntityConsultaIntro) arry.get(i);
                fila = entCon.getId_alumno() + "," + entCon.getEntCarnet() + "," + entCon.getEntnombre() + "," + entCon.getEntApellido() + "," + entCon.getEntCarrera() + "," + entCon.getEntMateria() + "," + entCon.getEntGrupoMate() + "," + entCon.getEntHorario() + "," + entCon.getEntGrupoLab();
                pw.println(fila);
            }
            pw.close();
            msj = "Los datos fueron almacenados en el archivo correctamente";
        } catch (Exception ex) {
            msj = ex.toString();
        }
        return msj;
    }

    public String InsertarAlumnoYDetalle(String carnet, String nombre, String apellido, int id_carrera, int id_lab, int id_grupo) {

        String msj = "Registrado con éxito";
        Connection cn;
        ConnDB db = new ConnDB();

        try {
            Class.forName(db.getDriver());
            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());



            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = cn.prepareCall("CALL I_detalle_alumno(?,?,?,?,?,?)");
            //se cargan los parametros de entrada
            proc.setString("_carnet", carnet);//Tipo String
            proc.setString("_nombre", nombre);
            proc.setString("_apellido", apellido);
            proc.setInt("_id_carrera", id_carrera);
            proc.setInt("_id_lab", id_lab);
            proc.setInt("_id_grupo", id_grupo);
            // Se ejecuta el procedimiento almacenado
            proc.execute();


            db=null;
            cn=null;
        } catch (Exception ex) {
            System.out.println(ex.toString());
            msj = "Error";
        }

        return msj;

    }
    
    
    public String BorrarDetalle_Al(int id_alumno) {

        String msj = "Eliminado con éxito";
        Connection cn;
        ConnDB db = new ConnDB();

        try {
            Class.forName(db.getDriver());
            cn = DriverManager.getConnection(db.getCadenaCon(), db.getUsuario(), db.getContrasenna());



            // se instancia el procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = cn.prepareCall("CALL D_registro_alumno(?)");
            //se cargan los parametros de entrada
            proc.setInt("_id_alumno", id_alumno);
            
            // Se ejecuta el procedimiento almacenado
            proc.execute();
            
            db=null;
            cn=null;
            proc=null;


        } catch (Exception ex) {
            System.out.println(ex.toString());
            msj = "Error "+ex.toString()+"";
        }

        return msj;

    }
}
